package com.ruicar.afs.cloud.apply.pre.loan.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruicar.afs.cloud.apply.common.dto.ChannelInfoDTO;
import com.ruicar.afs.cloud.apply.common.entity.ApplyCarDetails;
import com.ruicar.afs.cloud.apply.pre.loan.condition.ApplyReportCondition;
import com.ruicar.afs.cloud.apply.pre.loan.condition.CarInfoCondition;
import com.ruicar.afs.cloud.apply.pre.loan.vo.CarInfoVO;
import com.ruicar.afs.cloud.common.core.util.IResponse;
import com.ruicar.afs.cloud.parameter.commom.condition.VehicleCondition;
import com.ruicar.afs.cloud.vehicle.dto.CarInfoDto;

/**
 * @description: 业务选择-业务参数、资产信息、挂靠信息
 * @author: sijun.yu
 * @date: 2020/5/11 15:07
 */
public interface ApplyCarDetailsService extends IService<ApplyCarDetails> {

    /**
     * 到名单库查询挂牌车信息
     *
     * @param vin
     * @return
     */
    public IResponse carListingSelecte(String vin);

    /**
     * 二手车进件接口
     *
     * @param vin
     * @return
     */
    public IResponse usedCar(String vin);

    /**
     * 通过车架号获取数量
     *
     * @param carVin
     * @return
     */
    public Integer getCarVinCount(String carVin);

    /**
     * 系统车型库、资产及码表同步参数接口
     *
     * @param version
     * @return
     */
    public JSONObject brandAndCode(Long version);

    /**
     * 车E估估值报告
     * @param carInfoDto
     * @return
     */
    public JSONObject getValuationReport(CarInfoDto carInfoDto);

    /**
     * 通过ID获取车辆信息
     *
     * @param id
     * @return
     */
    public ApplyCarDetails getCarDetailsById(Long id);

    /**
     * 通过申请编号获取车辆信息
     *
     * @param applyNo
     * @return
     */
    public ApplyCarDetails getCarDetailsByApplyNo(String applyNo);

    /**
     * 获取车辆信息
     * @param vo
     * @param condition
     * @return
     */
    public CarInfoVO getCarInfo(CarInfoVO vo, ApplyReportCondition condition);

    /**
     * 保存车辆信息
     *
     * @param condition
     * @return
     */
    public ApplyCarDetails saveCarInfo(String applyNo, CarInfoCondition condition);

    /**
     * 更新车辆信息
     *
     * @param carDetails
     * @param condition
     */
    public void updateCarInfo(ApplyCarDetails carDetails, CarInfoCondition condition);

    /**
     * 查询品牌列表
     * @param condition
     * @return
     */
    public IResponse getBrandList(VehicleCondition condition);

    /**
     * 查询车型列表
     * @param condition
     * @return
     */
    public IResponse getModelList(VehicleCondition condition);

    /**
     * 查询车型列表 - 模糊
     * @param condition
     * @return
     */
    public IResponse getModelTitleList(VehicleCondition condition);

    /**
     * 获取车商省份和城市
     * @param dto
     * @return
     */
    public IResponse getAuthorizeRegion(ChannelInfoDTO dto);

}
